/* myftpspec.x
   fichier de spécification de l'interface de myftp (RPC)
*/

/* Notes :
Les opération GET, PUT transferont une quantité indéterminée de données
Nous ne pouvons donc pas les implémenter dans un simple appel mais en 4
opérations séparées (comme c'était le cas d'un fichier local)
- int OPEN(string filename, bool rw) retournera le fd du fichier ouvert
- int READ(int fd, string buf, int len) retourne le nombre de bytes lus
- int WRITE(int fd, string buf, int len) retourne le nombre de bytes écrits
- int CLOSE(int fd) ferme le fichier distant
Il faut alors définir les structures de données pour les arguments
*/

const BUFF_SIZE = 4096;	/* longueur buffer = 4KO */
const FN_SIZE = 256;	/* longueur filename max = 256 */
const MAX_BUFF_SIZE = 16384;

struct open_file {
	string	filename<FN_SIZE>;
	bool	rw;	/* r=FALSE(0), w=TRUE(1) */
};
struct data_o {			/* structure de données pour WRITE */
	int	fd;
	string	buf<BUFF_SIZE>;
	int	len;
};

struct data_i {                 /* structure de données pour READ */
        string  buf<BUFF_SIZE>;
        int     len;
};

struct authparms {
        string	username<FN_SIZE>;
  	int uid;
  	int gid;
 };

program PROG {
	version VERS {


		string PWD(void) = 1;       /* proc #1  renvoi le repertoire courant */
		bool CD(string) = 2;        /* proc #2  change le repertoire de travail */
		string LS(void) = 3;        /* proc #3  liste le contenu d'un repertoire */
		string GET(string) = 4;     /* proc #4  téléchargement d'un fichier*/
		int PUT(string) = 5;        /* proc #5  upload d'un fichier */
		int OPEN(open_file) = 6;    /* proc #6  ouverture d'un fichier */
		data_i READ(int) = 7;       /* proc #7  lecture dans un fichier */
		int WRITE(data_o) = 8;      /* proc #8  ecriture dans un fichier */
		int CLOSE(int) = 9;         /* proc #9  fermeture d'un fichier */
                authparms CONNECT(string) = 10;   /* proc #10 identifier l'utilisateur  */
		int BYE(void) = 11;         /* proc #11 sortie du programme  */
	} = 1;				/* vers #1 */
} = 0x12345678;				/* prog num*/
